from fastapi import Request
from sqlalchemy.exc import SQLAlchemyError


class AsyncSessionDependency:
    """
    使用类形式定义依赖项
    """

    async def __call__(self, request: Request) -> None:
        """
        """
        async with request.app.async_session_maker() as session:
            # await async_session.commit()
            try:
                yield session
                # 使用自动提交在某些情况下 会突发的asyncio.exceptions.CancelledError异常
                # await async_session.commit()
            except SQLAlchemyError as ex:
                await session.rollback()
            finally:
                # 1.4.0版本的话 需要收的执行关闭，才可以 不然会一直超时
                # 1.4.19的话 这个地方可以起到关闭的作用！
                await session.close()


# 实例化依赖类
async_session_dependency = AsyncSessionDependency()
